home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_100
/
147_01
/
mainop.c
< prev
next >
Wrap
Text File
|
1985-03-09
|
8KB
|
354 lines
/***************************************************************
* MAINOP.C
Release 7: RBBS 4.1 Edit 02 - Added check to allow display only
if message is not deleted for
continuous display with "+" or "*".
- Skips Confirm message if any typeahead
after G command.
- Added test for % in gocpm.
Release 6: RBBS 4.1 Edit 01 - Fixed msgno display in killmsg
- Relaxed permissions for non-PERSONAL mail
Release 5: RBBS 4.1 Edit 00 - Names now one large field
- Activated lstmsg for 1st 7 non-PERSONALs
- Inserted NOSITE into showuser
- Inserted PERSONLY in readmsgs
Release 4: RBBS 4.0 Edit 21 - fixed restricted-user bug in gocpm
Release 1: RBBS 4.0 Edit 18
* This file includes the functions:
* readmsgs calls tstnum, readmsg, tstaddr, prnt_sum, and
readtxt if OK.
* summsgs calls tstnum, readsum, tstaddr, and dispsum if OK
* killmsg calls tstnum, readsum, tstaddr, dispsum, and
ritesum if OK to delete
* goodbye calls closing and hexit to hangup
* gocpm calls closing and rexit
* tos time in RBBS
* chgpasswd calls chkpwd and updtuser
* help calls bufinmsg to display HELP.CCC
* bulletins calls bufinmsg to display BULLETINS.CCC
* showuser called by maindispatch U command
* tstnum prompts for msgno, checks for pause/quit
* tstaddr checks to see if user is "authorized" to see the
particular msg selected.
*****************************************************************/
#include <bdscio.h>
#include "rbbs4.h"
int skipquit;
int plus;
/***************************************************************/
readmsgs(fd,u,s)
int fd;
struct _user *u;
struct _sum *s;
{
int i;
int flag;
if ( !(i = tstnum("read",u)) )
return;
do
{
readsum(fd,mndx[i++],s);
flag = TRUE;
if ( personal )
flag = tstaddr(u,s,FALSE);
if ( flag && mno[i-1])
{
crlf(1);
#if !PERSONLY
if ( cchoice && (mno[i-1] > u->lstmsg[cchoice-1]) )
u->lstmsg[cchoice-1] = mno[i-1];
#endif
prnt_sum(s);
crlf(1);
readtxt(fd,mndx[i-1],s);
if (!skipquit)
if ( (i <= msgct) && plus)
if (!getyn("More"))
i = msgct + 2;
}
} while ( (i <= msgct) && plus);
plus = FALSE;
}
/***************************************************************/
summsgs(fd,u,s)
int fd;
struct _user *u;
struct _sum *s;
{
int i;
int fftflg;
int flag;
if ( !(i = tstnum("summarize",u)))
return;
fftflg = TRUE;
do
{
readsum(fd,mndx[i++],s);
flag = TRUE;
if ( personal )
flag = tstaddr(u,s,FALSE);
if ( flag && mno[i-1])
{
if (fftflg && !expert)
{
outstr(" No. Ct. Date From -> To Subject",2);
crlf(1);
fftflg = FALSE;
}
dispsum(s);
if (!(i%22))
{
if (!skipquit)
if ( (i <= msgct) && plus)
if (!getyn("More"))
return FALSE;
}
}
} while ( (i <= msgct) && plus);
plus = FALSE;
}
/***************************************************************/
killmsg(fd,u,s)
int fd;
struct _user *u;
struct _sum *s;
{
int i;
if ( !(i = tstnum("kill",u)))
return;
do
{
readsum(fd,mndx[i],s);
if (tstaddr(u,s,TRUE) && mno[i])
{
dispsum(s);
crlf(1);
if (getyn("Delete it"))
{
s->mstat = FALSE;
ritesum(fd,mndx[i],s);
mno[i] = FALSE;
}
}
else
{
outstr("You are not authorized to kill message #",3);
sprintf(tmpstr,"%d",mno[i]);
outstr(tmpstr,1);
crlf(1);
}
++i;
} while ( (i <= msgct) && plus);
plus = FALSE;
}
/***************************************************************/
goodbye(fd,ufd,u,s)
int fd,ufd;
struct _user *u;
struct _sum *s;
{
if (!*sav)
if ( !getyn("Confirm") )
return fd;
if (fd = closing(fd,ufd,u,s))
return fd;
#if DATETIME
tos();
#endif
#if HANGUP
sprintf(tmpstr,"Goodbye %s. Please call again!",u->nm);
outstr(tmpstr,2);
#else
outstr("Returning to CP/M...",2);
#endif
hexit(); /* Hangup */
}
/***************************************************************/
gocpm(fd,ufd,u,s)
int fd,ufd;
struct _user *u;
struct _sum *s;
{
if ( (*(u->ustat) == '*') || (*(u->ustat) == '%') )
{
outstr("Access to CP/M has been denied.",2);
return fd;
}
if (fd = closing(fd,ufd,u,s))
return fd;
#if DATETIME
tos();
#endif
if (!expert)
bufinmsg("EXIT2CPM");
rexit();
}
/***************************************************************/
#if DATETIME
tos()
{
char dif[9];
strcpy(dif,"00:00:00");
get_date();
sscanf(logdate+10,"%s ",tmpstr);
sscanf(sysdate+10,"%s ",tmpstr+10);
timdif(tmpstr,tmpstr+10,dif);
sprintf(tmpstr,"Time in RBBS: %s",dif);
outstr(tmpstr,1);
}
#endif
/***************************************************************/
chgpasswd(u,fd)
struct _user *u;
int fd;
{
chkpwd(u->pwd);
updtuser(u,fd);
}
/***************************************************************/
help()
{
bufinmsg("HELP");
}
/***************************************************************/
bulletins()
{
if (bufinmsg("BULLETINS"));
else
outstr("NO BULLETINS",2);
}
/****************************************************************/
showuser(fd,u) /*CHECKS THE USER FILE & EXITS */
int fd;
struct _user *u;
{
int ndx;
struct _user u2;
char temp[SECSIZ];
for ( ndx = 1; ndx <= u->maxno; ndx++)
{
/* SPRINT CONSTANT INFORMATION */
formrec(tmpstr,SECSIZ);
readrec(fd,ndx,tmpstr,1);
sscanf(tmpstr+NM,"%s",u2.nm); /* NM: */
#if (NOSITE && LASTREAD)
#else
sscanf(tmpstr+FRM,"%s",u2.from); /* FRM: */
#endif
sscanf(tmpstr+LLG,"%s",u2.lastlog); /* LLG: */
sprintf(temp,"%-16s Last Logon: %s",u2.nm,u2.lastlog);
#if (NOSITE && LASTREAD)
#else
#if DATETIME
sprintf(tmpstr," from %-20s",u2.from);
#else
sprintf(tmpstr," from %s",u2.from);
#endif
strcat(temp,tmpstr);
#endif
outstr(temp,1);
if (!(ndx%22))
if(!getyn("More"))
ndx = u->maxno+1;
}
}
/****************************************************************/
tstnum(msg,u)
char *msg;
struct _user *u;
{
char input[6];
int i,n;
unsigned *addr;
outstr("Message Number: ",5);
instr("",input,6);
crlf(2);
addr = input + strlen(input)-1;
plus = FALSE;
if (*addr == '+' || *addr == '*')
{
skipquit = FALSE;
if(*addr == '*')
skipquit = TRUE;
plus = TRUE;
*addr = 0;
}
if (!strcmp("summarize",msg))
plus = TRUE;
if ( cchoice && (*input == '#') )
n = u->lstmsg[cchoice-1] + 1;
else
n = atoi(input);
if (n > lastmsg)
{
outstr("Message no. out of range",1);
return FALSE;
}
i = 1;
while (i <= msgct)
{
if (mno[i++] == n)
return --i;
if (i > msgct)
{
if (plus)
{
++n;
i = 1;
if (n > lastmsg)
return FALSE;
}
else
return FALSE;
}
}
}
/****************************************************************/
/* Checks to see if the user is authorized */
/* to see the message and returns FALSE if not */
tstaddr(u,s,type)
struct _user *u;
struct _sum *s;
int type;
{
capstr(s->tnm);
capstr(s->fnm);
if (!s->mstat)
return FALSE;
if ( (sysop) || (!strcmp("ALL",s->tnm) && !type) )
return TRUE;
if ( !strcmp(u->nm,s->tnm) )
return TRUE;
if ( !strcmp(u->nm,s->fnm) )
return TRUE;
return FALSE;
}
/****************************************************************/
}
if (!strcmp("summarize",msg))
plus = TRUE;
if ( cch